package geeks.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import geeks.dao.BaseDao;
import geeks.excepcion.DAOExcepcion;
import geeks.modelo.CentroFormacion;
import geeks.modelo.TipoCentroFormacion;
import geeks.util.ConexionBD;

public class CentroFormacionDAO extends BaseDao{
			
	public Collection<CentroFormacion> buscarPorNombre(String nombre)
			throws DAOExcepcion {
		String query = "select IdCentroFormacion, IdTipoCentroFormacion, Nombre, Url, Logo from CentroFormacion where Nombre like ?";
		Collection<CentroFormacion> lista = new ArrayList<CentroFormacion>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, '%' + nombre +'%' );
			rs = stmt.executeQuery();
			while (rs.next()) {
				CentroFormacion vo = new CentroFormacion();
				TipoCentroFormacion tc =new TipoCentroFormacion();
				
				tc.setIdtipocentroformacion(rs.getInt("IdTipoCentroFormacion"));
				vo.setOtipocentroformacion(tc);
				vo.setIdcentroformacion(rs.getInt("IdCentroFormacion"));
				vo.setNombre(rs.getString("Nombre"));
				vo.setUrl(rs.getString("Url"));
				vo.setLogo(rs.getString("Logo"));				
				lista.add(vo);
				System.out.println(rs.getInt("IdTipoCentroFormacion"));
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	
		return lista;
	}	
	
	public CentroFormacion buscarPorCodigo(int codigo)
			throws DAOExcepcion {
		String query = "select IdCentroFormacion, IdTipoCentroFormacion, Nombre, Url, Logo from CentroFormacion where IdCentroFormacion = ?";
		CentroFormacion vo = new CentroFormacion(); 
		TipoCentroFormacion tc =new TipoCentroFormacion();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, codigo);
			rs = stmt.executeQuery();
			while (rs.next()) {				
				
				tc.setIdtipocentroformacion(rs.getInt("IdTipoCentroFormacion"));
				vo.setOtipocentroformacion(tc);
				//vo.setIdCentroFormacion(rs.getInt("IdCentroFormacion"));
				vo.setIdcentroformacion(rs.getInt("IdCentroFormacion"));
				vo.setNombre(rs.getString("Nombre"));
				vo.setUrl(rs.getString("Url"));
				vo.setLogo(rs.getString("Logo"));
				//System.out.println(rs.getInt("IdCentroFormacion"));
			}
		
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		
		return vo;			
			
	}
	
	
	public CentroFormacion insertar(CentroFormacion vo) throws DAOExcepcion {
		String query = "insert into CentroFormacion(IdTipoCentroFormacion,Nombre,Url,Logo) values (?,?,?,?)";		
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, vo.getOtipocentroformacion().getIdtipocentroformacion());
			stmt.setString(2, vo.getNombre());
			stmt.setString(3, vo.getUrl());
			stmt.setString(4, vo.getLogo());			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
			// Obtener el ultimo id
			int id = 0;
			query = "select last_insert_id()";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			if (rs.next()) {
				id = rs.getInt(1);
			}
			vo.setIdcentroformacion(id);

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

	public CentroFormacion obtener(int idCentroFormacion) throws DAOExcepcion {
		CentroFormacion vo = new CentroFormacion();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select IdCentroFormacion,IdTipoCentroFormacion, Nombre, Url, Logo from CentroFormacion where IdCentroFormacion=?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idCentroFormacion);
			rs = stmt.executeQuery();
			if (rs.next()) {
				vo.setIdcentroformacion(rs.getInt(1));
				
				TipoCentroFormacion tc =new TipoCentroFormacion();
				tc.setIdtipocentroformacion(rs.getInt(2));
				
				vo.setOtipocentroformacion(tc);
				
				//vo.setIdTipoCentroFormacion(rs.getInt(2));
				
				vo.setNombre(rs.getString(3));
				vo.setUrl(rs.getString(4));
				vo.setLogo(rs.getString(5));
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

	public void eliminar(int idCentroFormacion) throws DAOExcepcion {
		String query = "delete from CentroFormacion WHERE IdCentroFormacion=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idCentroFormacion);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

	public CentroFormacion actualizar(CentroFormacion vo) throws DAOExcepcion {
		String query = "update CentroFormacion set IdTipoCentroFormacion=?,Nombre=?,Url=?,Logo=? where IdCentroFormacion=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, vo.getOtipocentroformacion().getIdtipocentroformacion());
			stmt.setString(2, vo.getNombre());
			stmt.setString(3, vo.getUrl());
			stmt.setString(4, vo.getLogo());
			stmt.setInt(5, vo.getIdcentroformacion());
			int i = stmt.executeUpdate();
			System.out.println("Se actualizo el producto " + vo.getNombre() + " con Id " + i);
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

	public Collection<CentroFormacion> listar() throws DAOExcepcion {
		Collection<CentroFormacion> c = new ArrayList<CentroFormacion>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "select IdCentroFormacion,Nombre,Url,Logo from CentroFormacion order by Nombre";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				CentroFormacion vo = new CentroFormacion();
				vo.setIdcentroformacion(rs.getInt("IdCentroFormacion"));
				vo.setNombre(rs.getString("Nombre"));
				vo.setUrl(rs.getString("Url"));
				vo.setLogo(rs.getString("Logo"));
				c.add(vo);
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}

}
